// package com.yc.cloud;

// import com.baomidou.mybatisplus.annotation.FieldFill;
// import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
// import com.baomidou.mybatisplus.core.toolkit.StringUtils;
// import com.baomidou.mybatisplus.generator.FastAutoGenerator;
// import com.baomidou.mybatisplus.generator.config.OutputFile;
// import com.baomidou.mybatisplus.generator.config.rules.DateType;
// import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
// import com.baomidou.mybatisplus.generator.fill.Column;
// import com.yc.cloud.common.orm.BaseEntity;

// import java.util.*;

// /**
//  * <p>
//  * 代码生成器（快速版本）
//  * </p>
//  *
//  * @author 橘子
//  * @since 2021-10-22 0022 16:51
//  */
// public class FastCodeGenerator {

//     // 基础信息配置
//     private static final String db = "yccloud17_aibox";
//     private static final String basePackageName = "com/yc/cloud";
//     private static final String URL = "jdbc:mysql://localhost:13306/" + db + "?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true";
//     private static final String USERNAME = "root";
//     private static final String PASSWORD = "Acme@2023";
//     private static final String author = "橘子";

//     /**
//      * <p>
//      * 读取控制台内容
//      * </p>
//      */
//     public static String scanner(String tip) {
//         Scanner scanner = new Scanner(System.in);
//         StringBuilder help = new StringBuilder();
//         help.append("请输入" + tip + "：");
//         System.out.println(help.toString());
//         if (scanner.hasNext()) {
//             String ipt = scanner.next();
//             if (StringUtils.isNotBlank(ipt)) {
//                 return ipt;
//             }
//         }
//         throw new MybatisPlusException("请输入正确的" + tip + "！");
//     }

//     /**
//      * <p>
//      * 获取要生成的表
//      * </p>
//      */
//     protected static List<String> getTables(String tables) {
//         return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
//     }

//     /**
//      * 执行代码生成
//      */
//     public static void main(String[] args) {
//         // 选择模块
//         String swarmName = scanner("模块名 admin or portal");
//         String parent = "com.yc.cloud";
//         String packageName = basePackageName;

//         // 项目根路径
//         String projectRootPath = System.getProperty("user.dir");
//         // Entity文件输出路径
//         String entityPath = projectRootPath + "/mbg/src/main/java/" + packageName + "/entity/";
//         // Mapper文件输出路径
//         String mapperPath = projectRootPath + "/mbg/src/main/java/" + packageName + "/mapper/";
//         // Mapper XML文件输出路径
//         String mapperXmlPath = projectRootPath + "/mbg/src/main/resources/mapper/";
//         // Service文件输出路径
//         String servicePath = projectRootPath + "/" + swarmName + "/src/main/java/" + packageName + "/" + swarmName + "/service/";
//         // ServiceImpl文件输出路径
//         String serviceImplPath = projectRootPath + "/" + swarmName + "/src/main/java/" + packageName + "/" + swarmName + "/service/impl/";
//         // Controller文件输出路径
//         String controllerPath = projectRootPath + "/" + swarmName + "/src/main/java/" + packageName + "/" + swarmName + "/controller/";
//         // DTO请求参数文件输出路径
//         String dtoReqPath = projectRootPath + "/" + swarmName + "/src/main/java/" + packageName + "/" + swarmName + "/dto/request/";
//         // VO响应参数文件输出路径
//         String voPath = projectRootPath + "/" + swarmName + "/src/main/java/" + packageName + "/" + swarmName + "/vo/";

//         // 执行代码生成
//         FastAutoGenerator.create(URL, USERNAME, PASSWORD)
//                 // 1. 全局配置
//                 .globalConfig(builder -> builder
//                         .author(author)
//                         .disableOpenDir()
//                         .enableSwagger()
//                         .dateType(DateType.TIME_PACK)
//                         .commentDate("yyyy-MM-dd"))

//                 // 2. 包配置
//                 .packageConfig(builder -> builder
//                         .parent(parent)
//                         .entity("entity")
//                         .mapper("mapper")
//                         .service(swarmName + ".service")
//                         .serviceImpl(swarmName + ".service.impl")
//                         .controller(swarmName + ".controller")
//                         .pathInfo(new HashMap<OutputFile, String>() {{
//                             put(OutputFile.entity, entityPath);
//                             put(OutputFile.mapper, mapperPath);
//                             put(OutputFile.xml, mapperXmlPath);
//                             put(OutputFile.service, servicePath);
//                             put(OutputFile.serviceImpl, serviceImplPath);
//                             put(OutputFile.controller, controllerPath);
//                         }}))

//                 // 3. 策略配置
//                 .strategyConfig((scanner, builder) -> builder
//                         .addInclude(getTables(scanner.apply("请输入表名，多个英文逗号分隔？生成所有表，请输入[all]：")))
//                         .addTablePrefix("t_", "c_")
//                         // Entity策略
//                         .entityBuilder()
//                         .superClass(BaseEntity.class)
//                         .enableColumnConstant()
//                         .enableLombok()
//                         .enableRemoveIsPrefix()
//                         .enableTableFieldAnnotation()
//                         .enableFileOverride() // 启用文件覆盖
//                         .addTableFills(new Column("create_time", FieldFill.INSERT))
//                         .addTableFills(new Column("update_time", FieldFill.INSERT_UPDATE))

//                         // Mapper策略
//                         .mapperBuilder()
//                         .enableMapperAnnotation()
//                         .enableBaseResultMap()
//                         .enableBaseColumnList()
//                         .enableFileOverride() // 启用文件覆盖

//                         // Service策略
//                         .serviceBuilder()
//                         .formatServiceFileName("%sService")
//                         .formatServiceImplFileName("%sServiceImpl")
//                         .enableFileOverride() // 启用文件覆盖

//                         // Controller策略
//                         .controllerBuilder()
//                         .enableRestStyle()
//                         .enableHyphenStyle()
//                         .enableFileOverride() // 启用文件覆盖
//                         .build())
                
//                 // 注入配置，用于生成DTO和VO
//                 .injectionConfig(builder -> {
//                     // 添加自定义属性
//                     Map<String, Object> customMap = new HashMap<>();
//                     customMap.put("swarmName", swarmName);
//                     builder.customMap(customMap);
                    
//                     // 添加自定义文件
//                     builder.customFile(builder1 -> builder1
//                             .fileName("${entity}CreateParam.java")
//                             .templatePath("/templates/dto_create.java.vm")
//                             .packageName(swarmName + ".dto.request")
//                             .enableFileOverride()
//                             .build());
                    
//                     builder.customFile(builder1 -> builder1
//                             .fileName("${entity}UpdateParam.java")
//                             .templatePath("/templates/dto_update.java.vm")
//                             .packageName(swarmName + ".dto.request")
//                             .enableFileOverride()
//                             .build());
                    
//                     builder.customFile(builder1 -> builder1
//                             .fileName("${entity}Vo.java")
//                             .templatePath("/templates/vo.java.vm")
//                             .packageName(swarmName + ".vo")
//                             .enableFileOverride()
//                             .build());
//                 })
                
//                 // 使用Velocity引擎模板，默认的是Velocity引擎模板
//                 .templateEngine(new VelocityTemplateEngine())
                
//                 // 执行
//                 .execute();
//     }
// }


